5

反射

反射机制是指程序可以访问、检测和修改它本身状态或行为的一种能力。对于JavaScript,简单来说,就是对类的成员进行修改等操作。

js可以通过for(...in...)来实现反射。

继承

JavaScript中没有专门的机制来实现类的继承,但可以通过复制一个类的prototype到另外一个类来实现继承。

function Helloclass()
{
     //构造函数
}
function Hellosubclass()
{
     //构造函数
}

Hellosubclass.prototype = Helloclass.prototype;
Hellosubclass.prototype.Propertys = "name";
Hellosubclass.prototype.Methods = function()
{
     //方法示例代码
}
var obj = new Hellosubclass();

以上并非严格的继承,两个类是同一prototype的引用,HelloclassHellosubclass共享同一个prototype,重写一个类的成员或方法会影响另一个。

可以利用反射机制继承。利用for(...in...)语句枚举出所有基类prototype成员,并将其赋值给prototype对象。进一步,可以为每个类添加一个共有的方法用来实现类的继承:

function.prototype.inherit=function(baseClass)
{
     for(var p in baseClass.prototype)
     {
          this.prototype[p] = baseClass.prototype[p];
     }
}

可以看出,所谓的反射机制,从简单方面来讲,就是对类中成员进行枚举、修改等操作的能力。如果存在一种机制,在不知道某一个类中到底有什么函数,或者成员变量的情况下就可以对其操作(例如,js可以对类成员进行枚举),这种机制就可以成为反射。
js中没有继承机制,但是可以对某一个类的成员通过反射机制“逐一复制”,然后再修改需要“覆盖”的成员,就可以达到“继承”的效果。这也是反射机制的一个应用。


psy
392 声望12 粉丝

假装平静的外表下一颗躁动的心